package top.fwpsl.util;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

/**
 * 日志工具类
 *
 * @auther: 风戏fw
 * @date: 2020/11/21
 */
public class LogHelper {

    private static final String ERROR_LOG_NAME = "errorLog";

    private static final String CONSOLE_LOG_NAME = "consoleLog";

    private static Map<String, LogHelper> logHelperMap = new ConcurrentHashMap<>();

    public static LogHelper CONSOLE_LOG = LogHelper.getInstatnce(CONSOLE_LOG_NAME);

    public static LogHelper ERROR_LOG = LogHelper.getInstatnce(ERROR_LOG_NAME);

    private Logger logger;

    /**
     * 根据日志名, 得到对应的 logger对象
     *
     * @param logName 日志名称
     * @return
     */
    public static LogHelper getInstatnce(String logName) {
        if (!logHelperMap.containsKey(logName)) {
            LogHelper tmp = new LogHelper();
            tmp.logger = LogManager.getLogger(logName);
            logHelperMap.put(logName, tmp);
            return tmp;
        }
        return logHelperMap.get(logName);
    }

    /**
     * 记录打印日志信息，级别为：info
     *
     * @param str
     */
    public static void consoleLog(String str) {
        CONSOLE_LOG.write(str);
    }

    /**
     * 记录错误信息，级别为：error
     *
     * @param str
     */
    public static void errorLog(String str) {
        ERROR_LOG.error(str);
    }

    /**
     * 记录捕获的异常，级别为：error
     *
     * @param e
     */
    public static void errorLog(Exception e) {
        ERROR_LOG.error(e);
    }

    /**
     * 返回Logger对象
     */
    public Logger getLogger() {
        return logger;
    }

    /**
     * 记录日志信息，级别为：info
     *
     * @param str
     */
    public void write(String str) {
        logger.info(str);
    }

    /**
     * 记录错误信息。日志级别：error
     *
     * @param str 错误信息
     */
    public void error(String str) {
        logger.error(str);
    }

    /**
     * 记录捕获的异常，级别为：error
     *
     * @param e 捕获的异常
     */
    public void error(Exception e) {
        error(e, "");
    }

    /**
     * 记录异常和错误信息。日志级别：error
     *
     * @param e   捕获的异常
     * @param str 错误信息
     */
    public void error(Exception e, String str) {
        logger.error(str, e);
    }

}
